/**
 * 音乐源信息
 */
export interface MusicInfo {
  data: Datum[]
  code: number
}

export interface Datum {
  id: number
  url: string
  br: number
  size: number
  md5: string
  code: number
  expi: number
  type: string
  gain: number
  peak: number
  fee: number
  uf?: any
  payed: number
  flag: number
  canExtend: boolean
  freeTrialInfo: FreeTrialInfo
  level: string
  encodeType: string
  freeTrialPrivilege: FreeTrialPrivilege
  freeTimeTrialPrivilege: FreeTimeTrialPrivilege
  urlSource: number
  rightSource: number
  podcastCtrp?: any
  effectTypes?: any
  time: number
}
export interface FreeTimeTrialPrivilege {
  resConsumable: boolean
  userConsumable: boolean
  type: number
  remainTime: number
}

export interface FreeTrialPrivilege {
  resConsumable: boolean
  userConsumable: boolean
  listenType?: any
  cannotListenReason?: any
  playReason?: any
}

export interface FreeTrialInfo {
  fragmentType: number
  start: number
  end: number
  algData?: any
}

// export interface HotDetailRes {
//   code: number
//   data: HotDetail[]
//   message: string
// }

//

export interface HotDetailRes {
  code: number
  result: Result
}

export interface Result {
  hots: Hot[]
}

export interface Hot {
  first: string
  second: number
  third?: any
  iconType: number
}

//

// export interface HotDetail {
//   searchWord: string
//   score: number
//   content: string
//   source: number
//   iconType: number
//   iconUrl?: string
//   url: string
//   alg: string
// }

export interface SuggestionSearchRes {
  result: SuggestionResult
  code: number
}

export interface SuggestionResult {
  albums: Album[]
  artists: ArtistTwo[]
  songs: Song[]
  playlists: Playlist[]
  order: string[]
}
export interface Album {
  id: number
  name: string
  artist: Artist
  publishTime: number
  size: number
  copyrightId: number
  status: number
  picId: PicId
  mark: number
}

export interface Artist {
  id: number
  name: string
  picUrl: string
  alias: string[]
  albumSize: number
  picId: PicId
  fansGroup?: any
  img1v1Url: string
  img1v1: number
  alia: string[]
  trans?: any
}

export interface PicId {
  s: number
  e: number
  c: number[]
}

export interface ArtistTwo {
  id: number
  name: string
  picUrl: string
  alias: string[]
  albumSize: number
  picId: PicId
  fansGroup?: any
  img1v1Url: string
  accountId: number
  img1v1: PicId
  alia: string[]
  trans?: any
}

export interface Song {
  id: number
  name: string
  artists: ArtistThree[]
  album: SongAlbum
  duration: number
  copyrightId: number
  status: number
  alias: string[]
  rtype: number
  ftype: number
  mvid: number
  fee: number
  rUrl?: any
  mark: number
}

export interface Playlist {
  id: number
  name: string
  coverImgUrl: string
  creator?: any
  subscribed: boolean
  trackCount: number
  userId: number
  playCount: number
  bookCount: number
  specialType: number
  officialTags?: any
  action?: any
  actionType?: any
  recommendText?: any
  score?: any
  description: string
  highQuality: boolean
}

export interface ArtistThree {
  id: number
  name: string
  picUrl?: any
  alias: any[]
  albumSize: number
  picId: number
  fansGroup?: any
  img1v1Url: string
  img1v1: number
  trans?: any
}

export interface SongAlbum {
  id: number
  name: string
  artist: ArtistThree
  publishTime: number
  size: number
  copyrightId: number
  status: number
  picId: PicId
  mark: number
}

export interface CommonSearchRes {
  code: number
  result: {
    hasMore: boolean
    songCount: number
    songs: Song[]
  }
}

export interface MusicDetail {
  songs: MusicSong[]
  privileges: Privilege[]
  code: number
}

export interface MusicSong {
  name: string
  id: number
  pst: number
  t: number
  ar: Ar[]
  alia: any[]
  pop: number
  st: number
  rt: string
  fee: number
  v: number
  crbt?: any
  cf: string
  al: Al
  dt: number
  h: H
  m: H
  l: H
  sq: H
  hr: H
  a?: any
  cd: string
  no: number
  rtUrl?: any
  ftype: number
  rtUrls: any[]
  djId: number
  copyright: number
  s_id: number
  mark: number
  originCoverType: number
  originSongSimpleData?: any
  tagPicList?: any
  resourceState: boolean
  version: number
  songJumpInfo?: any
  entertainmentTags?: any
  awardTags?: any
  single: number
  noCopyrightRcmd?: any
  rtype: number
  rurl?: any
  mst: number
  cp: number
  mv: number
  publishTime: number
}

export interface Privilege {
  id: number
  fee: number
  payed: number
  st: number
  pl: number
  dl: number
  sp: number
  cp: number
  subp: number
  cs: boolean
  maxbr: number
  fl: number
  toast: boolean
  flag: number
  preSell: boolean
  playMaxbr: number
  downloadMaxbr: number
  maxBrLevel: string
  playMaxBrLevel: string
  downloadMaxBrLevel: string
  plLevel: string
  dlLevel: string
  flLevel: string
  rscl?: any
  freeTrialPrivilege: FreeTrialPrivilege
  chargeInfoList: ChargeInfoList[]
}

export interface ChargeInfoList {
  rate: number
  chargeUrl?: any
  chargeMessage?: any
  chargeType: number
}

export interface H {
  br: number
  fid: number
  size: number
  vd: number
  sr: number
}

export interface Al {
  id: number
  name: string
  picUrl: string
  tns: any[]
  pic_str: string
  pic: Pic
}

export interface Pic {
  s: number
  e: number
  c: number[]
}

export interface Ar {
  id: number
  name: string
  tns: any[]
  alias: any[]
}

export interface LyricRes {
  sgc: boolean
  sfy: boolean
  qfy: boolean
  lrc: Lrc
  klyric: Lrc
  tlyric: Lrc
  romalrc: Lrc
  code: number
}

export interface Lrc {
  version: number
  lyric: string
}

// *******
export interface PersonalizedRes {
  hasTaste: boolean
  code: number
  category: number
  result: Personalized[]
}

export interface Personalized {
  id: number
  type: number
  name: string
  copywriter: string
  picUrl: string
  canDislike: boolean
  trackNumberUpdateTime: number
  playCount: number
  trackCount: number
  highQuality: boolean
  alg: string
}

// ---------
export interface NewSongRes {
  code: number
  category: number
  result: NewSongResult[]
}

export interface NewSongResult {
  id: number
  type: number
  name: string
  copywriter?: any
  picUrl: string
  canDislike: boolean
  trackNumberUpdateTime?: any
  song: NewSong
  alg: string
}

export interface NewSong {
  name: string
  id: number
  position: number
  alias: string[]
  status: number
  fee: number
  copyrightId: number
  disc: string
  no: number
  artists: Artist[]
  album: NewAlbum
  starred: boolean
  popularity: number
  score: number
  starredNum: number
  duration: number
  playedNum: number
  dayPlays: number
  hearTime: number
  sqMusic: SqMusic
  hrMusic?: SqMusic
  ringtone: string
  crbt?: any
  audition?: any
  copyFrom: string
  commentThreadId: string
  rtUrl?: any
  ftype: number
  rtUrls: any[]
  copyright: number
  transName?: string
  sign?: any
  mark: number
  originCoverType: number
  originSongSimpleData?: OriginSongSimpleDatum
  single: number
  noCopyrightRcmd?: any
  hMusic: SqMusic
  mMusic: SqMusic
  lMusic: SqMusic
  bMusic: SqMusic
  mvid: number
  rtype: number
  rurl?: any
  mp3Url?: any
  privilege: Privilege
  transNames?: string[]
}

export interface Privilege {
  id: number
  fee: number
  payed: number
  st: number
  pl: number
  dl: number
  sp: number
  cp: number
  subp: number
  cs: boolean
  maxbr: number
  fl: number
  toast: boolean
  flag: number
  preSell: boolean
  playMaxbr: number
  downloadMaxbr: number
  maxBrLevel: string
  playMaxBrLevel: string
  downloadMaxBrLevel: string
  plLevel: string
  dlLevel: string
  flLevel: string
  rscl?: any
  freeTrialPrivilege: FreeTrialPrivilege
  chargeInfoList: ChargeInfoList[]
}

export interface ChargeInfoList {
  rate: number
  chargeUrl?: any
  chargeMessage?: any
  chargeType: number
}

export interface OriginSongSimpleDatum {
  songId: number
  name: string
  artists: Artist2[]
  albumMeta: Artist2
}

export interface Artist2 {
  id: number
  name: string
}

export interface SqMusic {
  name?: any
  id: number
  size: number
  extension: string
  sr: number
  dfsId: number
  bitrate: number
  playTime: number
  volumeDelta: number
}

export interface NewAlbum {
  name: string
  id: number
  type: string
  size: number
  picId: PicId
  blurPicUrl: string
  companyId: number
  pic: PicId
  picUrl: string
  publishTime: number
  description: string
  tags: string
  company?: string
  briefDesc: string
  artist: NewArtist
  songs: any[]
  alias: any[]
  status: number
  copyrightId: number
  commentThreadId: string
  artists: NewArtist[]
  subType: string
  transName?: string
  onSale: boolean
  mark: number
  gapless: number
  picId_str: string
  transNames?: string[]
}

export interface NewArtist {
  name: string
  id: number
  picId: number
  img1v1Id: number
  briefDesc: string
  picUrl: string
  img1v1Url: string
  albumSize: number
  alias: any[]
  trans: string
  musicSize: number
  topicPerson: number
}
// */********** */

export interface RootTopList {
  code: number
  list: TopList[]
  rewardToplist: any
  artistToplist: any
}

export interface TopList {
  subscribers: any[]
  subscribed?: any
  creator?: any
  artists?: any
  tracks: Track[]
  updateFrequency: string
  backgroundCoverId: number
  backgroundCoverUrl?: any
  titleImage: number
  coverText?: any
  titleImageUrl?: any
  coverImageUrl?: any
  iconImageUrl?: any
  englishTitle?: any
  opRecommend: boolean
  recommendInfo?: any
  socialPlaylistCover?: any
  tsSongCount: number
  trackNumberUpdateTime: number
  adType: number
  highQuality: boolean
  subscribedCount: number
  cloudTrackCount: number
  specialType: number
  updateTime: number
  coverImgId: CoverImgId
  anonimous: boolean
  newImported: boolean
  trackCount: number
  commentThreadId: string
  coverImgUrl: string
  trackUpdateTime: number
  totalDuration: number
  privacy: number
  playCount: number
  createTime: number
  ordered: boolean
  description: string
  status: number
  tags: any[]
  userId: number
  name: string
  id: number
  coverImgId_str: string
  ToplistType: string
}

export interface CoverImgId {
  s: number
  e: number
  c: number[]
}

export interface Track {
  first: string
  second: string
}

export interface TopArtist {
  albumSize: number
  alias: string[]
  briefDesc: string
  fansCount: number
  followed: boolean
  id: number
  img1v1Id: number
  img1v1Id_str: string
  img1v1Url: string
  musicSize: number
  name: string
  picId: number
  picId_str: string
  picUrl: string
  topicPerson: number
  trans: string
}

export interface RootTopArtist {
  code: number
  more: boolean
  artists: TopArtist[]
}

// -----
export interface RootTags {
  tags: Tag[]
  code: number
}

export interface Tag {
  id: number
  name: string
  type: number
  category: number
  hot: boolean
}

// ------------*-------------------------------*---------------------*----------------

export interface RootTagPlaylist {
  playlists: TagPlaylist[]
  code: number
  more: boolean
  lasttime: number
  total: number
}

export interface TagPlaylist {
  name: string
  id: number
  trackNumberUpdateTime: number
  status: number
  userId: number
  createTime: number
  updateTime: number
  subscribedCount: number
  trackCount: number
  cloudTrackCount: number
  coverImgUrl: string
  coverImgId: CoverImgId
  description: string
  tags: string[]
  playCount: number
  trackUpdateTime: number
  specialType: number
  totalDuration: number
  creator: Creator
  tracks?: any
  subscribers: Subscriber[]
  subscribed: boolean
  commentThreadId: string
  newImported: boolean
  adType: number
  highQuality: boolean
  privacy: number
  ordered: boolean
  anonimous: boolean
  coverStatus: number
  recommendInfo?: any
  socialPlaylistCover?: any
  recommendText?: any
  shareCount: number
  coverImgId_str: string
  commentCount: number
  copywriter: string
  tag: string
}

export interface Subscriber {
  defaultAvatar: boolean
  province: number
  authStatus: number
  followed: boolean
  avatarUrl: string
  accountStatus: number
  gender: number
  city: number
  birthday: number
  userId: number
  userType: number
  nickname: string
  signature: string
  description: string
  detailDescription: string
  avatarImgId: CoverImgId
  backgroundImgId: CoverImgId | number
  backgroundUrl: string
  authority: number
  mutual: boolean
  expertTags?: any
  experts?: any
  djStatus: number
  vipType: number
  remarkName?: any
  authenticationTypes: number
  avatarDetail?: any
  backgroundImgIdStr: string
  avatarImgIdStr: string
  anchor: boolean
  avatarImgId_str: string
}

export interface Creator {
  defaultAvatar: boolean
  province: number
  authStatus: number
  followed: boolean
  avatarUrl: string
  accountStatus: number
  gender: number
  city: number
  birthday: number
  userId: number
  userType: number
  nickname: string
  signature: string
  description: string
  detailDescription: string
  avatarImgId: CoverImgId
  backgroundImgId: CoverImgId
  backgroundUrl: string
  authority: number
  mutual: boolean
  expertTags: string[]
  experts?: Expert
  djStatus: number
  vipType: number
  remarkName?: any
  authenticationTypes: number
  avatarDetail: AvatarDetail
  backgroundImgIdStr: string
  avatarImgIdStr: string
  anchor: boolean
  avatarImgId_str: string
}

export interface AvatarDetail {
  userType: number
  identityLevel: number
  identityIconUrl: string
}

export interface Expert {
  '2': string
  '1'?: string
}
